package com.cooksys.film_rental.bo;

import java.util.List;

import com.cooksys.film_rental.model.Address;
import com.cooksys.film_rental.model.Customer;
import com.cooksys.film_rental.model.Inventory;
import com.cooksys.film_rental.model.Staff;
import com.cooksys.film_rental.model.Store;

/**
 * Business object for the {@link Store} class
 * 
 * @author Peter Zastoupil
 * 
 */
public interface StoreBo {

	/**
	 * 
	 * @param storeId
	 *            the storeId to search by
	 * @return the {@link Store} object associated with the given storeId
	 */
	public Store getStoreByStoreId(Byte storeId);

	/**
	 * 
	 * @param storeId
	 *            String representation of the storeId to search by
	 * @return the {@link Store} object associated with the given storeId
	 */
	public Store getStoreByStoreId(String storeId);

	/**
	 * 
	 * @param staff
	 *            the {@link Staff} to search by
	 * @return a List of {@link Store} objects associated with the given staff
	 */
	public List<Store> searchStoresByStaff(Staff staff);

	/**
	 * 
	 * @param address
	 *            the {@link Address} to search by
	 * @return a List of {@link Store} objects associated with the given staff
	 */
	public List<Store> searchStoresByAddress(Address address);

	/**
	 * 
	 * @param inventory
	 *            the {@link Inventory} to search by
	 * @return the {@link Store} associated with the given inventory
	 */
	public Store getStoreByInventory(Inventory inventory);

	/**
	 * 
	 * @param customer
	 *            the {@link Customer} to search by
	 * @return the {@link Store} associated with the given customer
	 */
	public Store getStoreByCustomer(Customer customer);

	/**
	 * 
	 * @param staff
	 *            the {@link Staff} to search by
	 * @return the {@link Store} associated with the given staff
	 */
	public Store getStoreByStaff(Staff staff);
	
	/**
	 * 
	 * @return a List of all available {@link Store} objects
	 */
	public List<Store> getAllStores();

}
